<?php defined('SYSPATH') or die('No direct script access.');

class Model_Email_User extends Model {
	
	public static function send_confirm_link_for_email(Model_User $user)
	{
		$timelimit = time() + 60 * 60 * 1;
		
		$replacement = array(
			'{link}' => URL::site(Route::get('frontend_user_confirm')->uri(array(
				'controller' => 'user',
				'action' => 'confirm',
				'user_id' => $user->id,
				'hash' => Model_Email_User::generate_confirm_code($user, $timelimit),
				'timelimit' => $timelimit,
			)), TRUE),
			'{url_base}' => URL::base(TRUE),
		);
		
		$body = "
			<p>Это письмо отправлено с сайта {url_base}, здесь выслана ссылка для подтверждения нового e-mail.</p>
			<p>Если вы не запрашивали это письмо, значит кто-то ошибся при указании e-mail адреса.</p>
			<p>
				Ссылка для подтверждения нового e-mail: <br />
				<a href=\"{link}\">{link}</a>
			</p>
			<p><strong>Ссылка активна в течение часа.</strong> Если откроется страница 404, значит срок действия ссылки истёк.</p>
			<p>
				-- <br />
				Данное сообщение является автоматическим уведомлением. <br />
				С уважением, администратор {url_base} <br />
				<a href=\"{url_base}\">{url_base}</a>
			</p>
		";
		$body = str_replace(array_keys($replacement), array_values($replacement), $body);
		
		$msgmail = Swift_Message::newInstance()
			->setSubject('Подтверждение нового e-mail на сайте '.$_SERVER['SERVER_NAME'])
			->setFrom(Kohana::$config->load('email.from'))
			->setTo($user->email_new)
			->setBody($body, 'text/html');
		
		Model_Reg::get('mailer')->send($msgmail);
	}
	
	public static function generate_confirm_code(Model_User $user, $timelimit)
	{
		return
			md5(Kohana::$config->load('encrypt.default.key').$user->id.$user->email).
			md5(Kohana::$config->load('encrypt.default.key').$user->id.$user->email_new).
			md5(Kohana::$config->load('encrypt.default.key').$user->id.$timelimit);
	}
	
	public static function check_confirm_code(Model_User $user, $timelimit, $checkstr)
	{
		$hash = md5(Kohana::$config->load('encrypt.default.key').$user->id.$user->email).
				md5(Kohana::$config->load('encrypt.default.key').$user->id.$user->email_new).
				md5(Kohana::$config->load('encrypt.default.key').$user->id.$timelimit);
		
		if (time() > $timelimit)
			throw new HTTP_Exception_404;
		
		return ($hash === $checkstr);
	}
	
}